package com.sunyard.pcc.core.service;


import com.sunyard.pcc.common.bo.SysUserBO;
import com.sunyard.pcc.common.bo.SysUserCacheBO;
import com.sunyard.pcc.common.exception.PccCommonException;
import org.apache.shiro.authc.AuthenticationToken;

/**
 * @Author: Hewei
 * @Description: 用户对应应用层
 * @Date: Created in 13:44 2018/2/23
 */
public interface UserService {

    /**
     * 根据电话号码查询对应用户
     * @param telephone 电话号码，唯一
     * @return
     */
    SysUserBO selectUserByTelephone(String telephone) throws PccCommonException;

    /**
     * 添加新用户(新用户注册)
     * @param sysUserBO
     * @return
     * @throws PccCommonException
     */
    Boolean addNewUser(SysUserBO sysUserBO) throws PccCommonException;


    /**
     * 获取用户用户信息，及其相关权限，用于用户缓存
     * @param telephone 用户手机号，用户唯一标识
     * @return
     * @throws PccCommonException
     */
    SysUserCacheBO selectUserAndRolesByTelephone(String telephone) throws PccCommonException;


    /**
     * 用户登录次数限制及处理
     * @param userName 用户名即用户电话号码
     * @param useRedis 是否使用redis
     * @param saveInRedis 用户登录信息是否存储在redis中
     * @throws PccCommonException
     */
    Boolean LoginLimitByConfig(String userName, Boolean useRedis, Boolean saveInRedis) throws PccCommonException;

    /**
     * 重置用户登录失败次数
     * @param userName 用户名即电话号码
     * @param useRedis 使用redis
     * @param saveInRedis 用redis存储用户登录失败信息
     * @throws PccCommonException
     */
    void resetFailureNum(String userName, Boolean useRedis, Boolean saveInRedis) throws PccCommonException;


}
